home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-03 / imb9008.zip / TABLMNGR.BAS < prev    next >
BASIC Source File  |  1990-07-12  |  6KB  |  152 lines

  1. DEFINT A-Z
  2. '----------------------------------------------------------------
  3. 'Routines to manage a table of values in RAM
  4. '----------------------------------------------------------------
  5.  
  6. '$INCLUDE: 'TABLMNGR.BI'
  7.  
  8. 'Fixed-length table manager
  9.  
  10.   CONST True = -1, False = 0, MaxTblSize = 32767
  11.  
  12. '----------------------------------------------------------------
  13. 'Create a symbol based on parameters for table
  14. '----------------------------------------------------------------
  15. FUNCTION SymCreate$ (Sym$, Parms AS SymbolTableParameters)
  16.     SymCreate$ = Parms.Delim + SymPad$(UCASE$(Sym$), Parms)
  17. END FUNCTION
  18.  
  19. '----------------------------------------------------------------
  20. 'Create a table based on the parameters
  21. '----------------------------------------------------------------
  22. FUNCTION SymCreateTbl (Tbl$, Parms AS SymbolTableParameters, Nbr)
  23.   IF Nbr < 1 THEN Nbr = 1
  24.   Parms.TblLength = ((Parms.SWidth + LEN(Parms.Delim)) * Nbr)
  25.   IF Parms.TblLength <= MaxTblSize THEN
  26.     Tbl$ = SPACE$(Parms.TblLength)
  27.     FOR I = 0 TO Nbr - 1
  28.       TblOffset = (Parms.SWidth + LEN(Parms.Delim))
  29.       MID$(Tbl$, I * TblOffset + 1, 1) = Parms.Delim
  30.     NEXT I
  31.     Parms.NbrEntries = 0
  32.     Parms.NbrEmpty = Nbr
  33.     SymCreateTbl = True
  34.   ELSE
  35.     Parms.NbrEntries = 0
  36.     Parms.NbrEmpty = 0
  37.     Parms.TblLength = 0
  38.     SymCreateTbl = False
  39.   END IF
  40. END FUNCTION
  41.  
  42. '----------------------------------------------------------------
  43. 'Define a symbol for the table
  44. '----------------------------------------------------------------
  45. FUNCTION SymDefine (Tbl$, Sym$, Parms AS SymbolTableParameters)
  46.  
  47. 'If Symbol$ not blank and not previously defined and
  48. 'it doesn't contain the delimiter then add symbol
  49.  
  50.   SymDefine = False
  51.  
  52.   IF INSTR(Sym$, Parms.Delim) = 0 THEN
  53.     SymTest = SymDefined(Tbl$, Sym$, Parms)  'Check if defined
  54.     IF LEN(LTRIM$(RTRIM$(Sym$))) <> 0 AND NOT SymTest THEN
  55.       S$ = SymCreate(Sym$, Parms)
  56.       SymEmptyEntry$ = SymCreate$("", Parms)
  57.       SymLen = Parms.SWidth + 1
  58.         'Find an empty table entry or
  59.         'Adds entry to end of table
  60.       SPos = SymPos(Tbl$, "", Parms)  'Find first empty entry
  61.       IF SPos = 0 THEN                     'Add to end of string
  62.         IF Parms.TblLength + SymLen > MaxTblSize THEN
  63.           EXIT FUNCTION
  64.         END IF
  65.         Tbl$ = Tbl$ + S$
  66.         Parms.TblLength = Parms.TblLength + SymLen
  67.       ELSE
  68.         MID$(Tbl$, SPos, SymLen) = S$  'Set entry
  69.         Parms.NbrEmpty = Parms.NbrEmpty - 1
  70.       END IF
  71.       Parms.NbrEntries = Parms.NbrEntries + 1
  72.       SymDefine = True
  73.     END IF
  74.   END IF
  75. END FUNCTION
  76.  
  77. '----------------------------------------------------------------
  78. 'Check to see if symbol defined in the table
  79. '----------------------------------------------------------------
  80. FUNCTION SymDefined (Tbl$, Sym$, Parms AS SymbolTableParameters)
  81.   IF SymPos(Tbl$, Sym$, Parms) = 0 THEN
  82.     SymDefined = False
  83.   ELSE
  84.     SymDefined = True
  85.   END IF
  86. END FUNCTION
  87.  
  88. '----------------------------------------------------------------
  89. 'Display a table on the screen
  90. '----------------------------------------------------------------
  91. SUB SymDisplayTbl (Tbl$, Parms AS SymbolTableParameters)
  92.   PRINT "  Number of active symbol entries  = "; Parms.NbrEntries
  93.   PRINT "  Number of empty symbol entries   = "; Parms.NbrEmpty
  94.   PRINT "Press any key to see the table"
  95.   WHILE INKEY$ = "": WEND
  96.   PRINT
  97.   NbrSyms = Parms.TblLength \ (Parms.SWidth + 1)
  98.   FOR SymNbr = 1 TO NbrSyms
  99.     Sym$ = SymGet(Tbl$, SymNbr, Parms)
  100.     IF Sym$ <> "" THEN PRINT SymNbr, "|"; Sym$; "|"
  101.     IF INKEY$ <> "" THEN EXIT SUB
  102.   NEXT SymNbr
  103. END SUB
  104.  
  105. '----------------------------------------------------------------
  106. 'Get a symbol based on the position number from table
  107. '----------------------------------------------------------------
  108. FUNCTION SymGet$ (Tbl$, SymNbr, Parms AS SymbolTableParameters)
  109.   SymGet$ = ""
  110.   IF SymNbr > 0 THEN
  111.     BegPos = (Parms.SWidth + 1) * (SymNbr - 1) + 2
  112.     SymGet$ = LTRIM$(RTRIM$(MID$(Tbl$, BegPos, Parms.SWidth)))
  113.   END IF
  114. END FUNCTION
  115.  
  116. '----------------------------------------------------------------
  117. 'Pad a symbol with spaces on the end for maximum symbol length
  118. '----------------------------------------------------------------
  119. FUNCTION SymPad$ (Sym$, Parms AS SymbolTableParameters)
  120.   SymPad$ = LEFT$(Sym$ + SPACE$(Parms.SWidth), Parms.SWidth)
  121. END FUNCTION
  122.  
  123. '----------------------------------------------------------------
  124. 'Find the position of symbol in the string table
  125. '----------------------------------------------------------------
  126. FUNCTION SymPos (Tbl$, Sym$, Parms AS SymbolTableParameters)
  127.   IF INSTR(Sym$, Parms.Delim) = 0 THEN
  128.     SymPos = INSTR(Tbl$, SymCreate$(Sym$, Parms))
  129.   ELSE
  130.     SymPos = 0  'Cannot have delimiter in symbol
  131.   END IF
  132. END FUNCTION
  133.  
  134. '----------------------------------------------------------------
  135. 'Remove a symbol from the table
  136. '----------------------------------------------------------------
  137. FUNCTION SymUnDefine (Tbl$, Sym$, Parms AS SymbolTableParameters)
  138.   SymUnDefine = False
  139.   IF INSTR(Sym$, Parms.Delim) = 0 THEN    'Check this first
  140.     IF SymDefined(Tbl$, Sym$, Parms) THEN
  141.       SymEmptyEntry$ = SymCreate$("", Parms)
  142.   'Find the table location for Symbol$
  143.       SPos = SymPos(Tbl$, Sym$, Parms)  'Find empty entry
  144.       MID$(Tbl$, SPos) = SymEmptyEntry$        'Clear entry
  145.       SymUnDefine = True
  146.       Parms.NbrEntries = Parms.NbrEntries - 1
  147.       Parms.NbrEmpty = Parms.NbrEmpty + 1
  148.     END IF
  149.   END IF
  150. END FUNCTION
  151.  
  152.